// 如果在GTK+中需要输入一个字符串，可以使用输入框，这是一个单行输入构件，可以用于输入和显示正文内容
// 需要注意的是输入框是文本框的简化版本，其和文本框一样都支持Linux图形界面的快捷键
/* 该案例是一个输入框的典型应用实例，其实现了一个登录界面，其中密码采用了不显示输入字符的方式
 * 同时使用g_print函数将用户名和密码在终端中输出显示
 * */
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>

// 因为需要在子函数中输出账号和密码，所以需要用到全局变量
GtkWidget *name;
GtkWidget *passwd;

void button_deal(GtkWidget* widget, gpointer* data){
	
	const gchar *uname;
	const gchar *upasswd;

	// 分配内存空间
	uname = (gchar *)malloc(sizeof(gchar));
	upasswd = (gchar *)malloc(sizeof(gchar));
	// 获得用户名和密码
	uname = gtk_entry_get_text((GTK_ENTRY(name)));
	upasswd = gtk_entry_get_text(GTK_ENTRY(passwd));

	g_print("Name:%s\n",uname);
	g_print("Passwd:%s\n",upasswd);
}

int main(int argc, char *argv[]){
	
	// 窗口和按键的对应指针
	GtkWidget *window,*button,*box,*label;

	char title[] = "test";
	gtk_init(&argc,&argv);
	
	// 创建窗体
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),title);
	gtk_widget_set_usize(window,300,300);
	gtk_widget_set_uposition(window,300,300);
	// 登记窗体delete_event信号的回调函数
	gtk_signal_connect(GTK_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
	
	// 创建组合框、标签
	box = gtk_vbox_new(FALSE,0);
	label = gtk_label_new("name");
	// 将标签加入组合框
	gtk_box_pack_start(GTK_BOX(box),label,FALSE,FALSE,5);
	gtk_widget_show(label);

	// 创建输入构件，并设置字符串可见
	name = gtk_entry_new();
	gtk_entry_set_visibility(name,TRUE);
	// 将输入构件加入组合盒box中
	gtk_box_pack_start(GTK_BOX(box),name,FALSE,FALSE,5);
	gtk_widget_show(name);

	// 创建标签
	label = gtk_label_new("passwd");
	gtk_box_pack_start(GTK_BOX(box),label,FALSE,FALSE,5);
	gtk_widget_show(label);

	// 创建输入构件，设置字符串不可见
	passwd = gtk_entry_new();
	gtk_entry_set_visibility(passwd,FALSE);
	gtk_box_pack_start(GTK_BOX(box),passwd,FALSE,FALSE,5);
	gtk_widget_show(passwd);

	// 创建按钮
	button = gtk_button_new_with_label("ENTER");
	gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,5);
	gtk_signal_connect(GTK_OBJECT(button),"pressed",GTK_SIGNAL_FUNC(button_deal),"enter");
	gtk_widget_show(button);

	// 将box加入窗体
	gtk_container_add(GTK_CONTAINER(window),box);
	gtk_widget_show(box);
	gtk_widget_show(window);
	gtk_main();

	return 0;
	
}

